#include "opecv_roi.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace cv;


void doOpencvROI1()
{
	Mat srcImage = imread("2.png");
	if (!srcImage.data)
	{
		cout << "读取原始图失败！" << endl;
		return ;
	}
	namedWindow("srcImage", WINDOW_NORMAL);// 注意这个宏，使用WINDOW_NORMAL可以允许用户自由伸缩窗口大小
	imshow("srcImage", srcImage);

	Mat logo = imread("1.png");
	if (!logo.data)
	{
		cout << "读取原始logo图失败！" << endl;
		return ;
	}
	imshow("logo", logo);

	Mat imageROI = srcImage(Rect(0, 0, logo.cols, logo.rows)); //从原图中抠出矩形区域，Rect第一二参数表示矩形左上角定点的坐标，用于定位，后两个参数表示举行的宽和高
	imshow("RectSrc", imageROI);
	addWeighted(imageROI, 0.2, logo, 0.8, 0., imageROI);//dst = src1[I]*alpha+ src2[I]*beta + gamma；第一第四个参数就是各自权重，第5个参数就是公式中的偏执因子gamma。

	namedWindow("logo_result", WINDOW_NORMAL);
	imshow("logo_result", srcImage);
	waitKey();

}


void doOpencvROI2()
{
	Mat srcImage = imread("test.jpg");
	if (!srcImage.data)
	{
		cout << "读取原始图失败！" << endl;
		return ;
	}
	namedWindow("srcImage", WINDOW_NORMAL);// 注意这个宏，使用WINDOW_NORMAL可以允许用户自由伸缩窗口大小
	imshow("srcImage", srcImage);

	Mat logo = imread("test2.jpg");
	Mat mask = imread("test2.jpg",0); // 加载掩模（必须是灰度图）  
	if (!logo.data)
	{
		cout << "读取原始logo图失败！" << endl;
		return ;
	}
	Mat imageROI = srcImage(Rect(28, 41, logo.cols, logo.rows)); //从原图中抠出矩形区域，Rect第一二参数表示矩形左上角定点的坐标，用于定位，后两个参数表示举行的宽和高
	imshow("ROI", imageROI);

	logo.copyTo(imageROI,mask);//注意两个参数，一个是ROI,一个是掩模
	namedWindow("logo", WINDOW_NORMAL);
	imshow("logo", srcImage);
	waitKey();

}

